From c584947305873bf121a7d97bcc250c595b3f78c9 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Fri, 25 Nov 2005 17:58:36 +0100 Subject: [PATCH] In shadow-external mode, every VCPU must free its own monitor pagetable. Signed-off-by: Xin Li --- xen/arch/x86/shadow32.c | 9 +++------ xen/arch/x86/shadow_public.c | 21 ++++++++------------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/xen/arch/x86/shadow32.c b/xen/arch/x86/shadow32.c index 8a0e81b707..0df797a14f 100644 --- a/xen/arch/x86/shadow32.c +++ b/xen/arch/x86/shadow32.c @@ -800,13 +800,10 @@ void free_monitor_pagetable(struct vcpu *v) /* * Then free monitor_table. - * Note: for VMX guest, only BSP need do this free. */ - if (!(VMX_DOMAIN(v) && v->vcpu_id)) { - mfn = pagetable_get_pfn(v->arch.monitor_table); - unmap_domain_page(v->arch.monitor_vtable); - free_domheap_page(&frame_table[mfn]); - } + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0; diff --git a/xen/arch/x86/shadow_public.c b/xen/arch/x86/shadow_public.c index cc91811e34..69f7c0b7d6 100644 --- a/xen/arch/x86/shadow_public.c +++ b/xen/arch/x86/shadow_public.c @@ -297,13 +297,11 @@ void free_monitor_pagetable(struct vcpu *v) /* * free monitor_table. - * Note: for VMX guest, only BSP need do this free. */ - if (!(VMX_DOMAIN(v) && v->vcpu_id)) { - mfn = pagetable_get_pfn(v->arch.monitor_table); - unmap_domain_page(v->arch.monitor_vtable); - free_domheap_page(&frame_table[mfn]); - } + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); + v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0; } @@ -396,18 +394,15 @@ void free_monitor_pagetable(struct vcpu *v) /* * Then free monitor_table. - * Note: for VMX guest, only BSP need do this free. */ - if (!(VMX_DOMAIN(v) && v->vcpu_id)) { - mfn = pagetable_get_pfn(v->arch.monitor_table); - unmap_domain_page(v->arch.monitor_vtable); - free_domheap_page(&frame_table[mfn]); - } + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0; } -#endif +#endif static void shadow_free_snapshot(struct domain *d, struct out_of_sync_entry *entry) -- 2.30.2